﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Mvc4WebApiKoTb.Models.HomeModels
{
    /// <summary>
    /// 
    /// </summary>
    public class CustomValidationModel : IValidatableObject
    {
        [Required]
        public string Name { get; set; }

        [Required]
        [DataType(DataType.Date)]
        public DateTime Birthdate { get; set; }

        [Required]
        [DataType(DataType.Date)]
        public DateTime Deathdate { get; set; }

        [Required]
        public int MinValue { get; set; }

        [Required]
        public int MaxValue { get; set; }

        public void Initilize()
        {
            Birthdate = DateTime.Now.Date;
            Deathdate = DateTime.Now.Date.AddYears(100);
        }

        /// <summary>
        /// Die Custom Validate Methode die durch das Interface eingebunden wird.
        /// </summary>
        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (Birthdate.Date < DateTime.Now)
            {
                yield return new ValidationResult("Das Geburtsdatum muss in der Zukunft liegen", new[] { "Birthdate" });
            }

            if (MinValue <= 0)
            {
                yield return new ValidationResult("Der Minvalue muss größer wie 0 sein", new[] { "MinValue" });
            }

            if (MaxValue > 10 && MinValue > 10)
            {
                //Ausgeben der passenden Fehlermeldung und angeben bei welchen Werten die Fehlermeldung angezeigt werden soll
                yield return new ValidationResult("MaxValue und MinValue dürfen nicht größer wie 10 sein.", new[] { "MinValue", "MaxValue" });
            }

            if (Name.Trim().Length > 3 && !Name.StartsWith("Sq"))
            {
                yield return new ValidationResult("Wenn der Name länger wie 3 Zeichen ist, muss dieser mit 'Sq' beginnen.", new[] { "Name" });
            }
        }
    }
}